home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (PO)
/
Nibble Volume 10, No. 08 (1989-08)(MindCraft Publishing)(Side A).zip
/
Nibble Volume 10, No. 08 (1989-08)(MindCraft Publishing)(Side A).po
/
NUMCRUNCHER.S
< prev
next >
Wrap
Text File
|
1996-12-24
|
3KB
|
113 lines
******************************
* NumberCruncher Source Code *
* by Eric C. Mueller *
* Copyright(c) 1989 *
* MindCraft Publ. Corp. *
* Concord, MA 01742 *
* Merlin Assembler *
******************************
org $300
* equates
cout equ $fded
phex equ $fdda
number equ $6 ;& $7
ch equ $24
chkcom equ $debe ;eat a comma from line
frmevl equ $dd7b ;evaluate a formula (string)
chkstr equ $dd6c ;verify that formula is a string
linprnt equ $ed24 ;print X & A as a 16-bit decimal number
dptr equ $a0 ;descriptor pointer
* jump table
:0 jmp locate ;--> clear register area
:3 jmp prhex ;--> print number in hex
:6 jmp prbin ;--> print number in binary
:9 jmp fixerr ;--> fix up stack after error
:12 jmp instr ;--> do INSTR$ function
* subroutines
locate lda $6
jsr $fb5b ;vtab peek(6)
lda #2
sta ch
ldy #17
locate1 lda #$a0
jsr cout
dey
bne locate1
rts
prhex lda #14
sta ch
lda #"$"
jsr cout
lda $7
jsr phex
lda $6
jmp phex
prbin lda #2
sta ch
lda #"%"
jsr cout
lda $7
jsr prbin1
lda $6
prbin1 ldx #7
prbin2 rol ;move a bit into carry
pha
lda #"0" ;assume it's clear to start with
bcc prbin3
lda #"1"
prbin3 jsr cout ;print a single bit
pla
dex
bpl prbin2 ;print all eight bits
rts
fixerr pla ;right from the Applesloth manual
tay
pla
ldx $df
txs
pha
tya
pha
rts
instr lda $6 ;first, convert key to uppercase
and #$7f ;clear high bit
cmp #$e0-$80
blt :notlc ;but don't, if it's not lowercase to start with
and #$df-$80
sta $6
:notlc jsr chkcom ;eat comma
jsr frmevl ;turn string into something useable
jsr chkstr ;be sure it's a string
ldy #0
lda (dptr),Y ;get length of string
sta length
iny
lda (dptr),Y ;get low byte of address for string
pha
iny
lda (dptr),Y ;get high byte
sta dptr+1 ;re-write DPTR!
pla
sta dptr
ldy #0 ;begin
:1 lda (dptr),Y ;get byte of string
cmp number ;is it what we're after?
beq :gotit
iny
cpy length
bne :1
ldy #255
:gotit iny
sty number+1
rts
length dfb 0